package br.com.weysolucoes.dao;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

import br.com.weysolucoes.conexao.ConexaoBD;
import br.com.weysolucoes.constantes.ConstantesSQL;
import br.com.weysolucoes.dto.NaoConformidadeDTO;

public class NaoConformidadeDAO {

		ConstantesSQL constantesSQL = new ConstantesSQL();

		// cadastra no banco um Grupo defeito passado como parametro

		public boolean inserirNaoConformidade(NaoConformidadeDTO naoConformidadeDTO) throws SQLException {
			
			ConexaoBD conexaoBD = new ConexaoBD();
			Statement st = null;
			ResultSet rs = null;

			try {

				st = conexaoBD.connection.createStatement();
				PreparedStatement preparedStatement = conexaoBD.connection.prepareStatement(constantesSQL.getSqlInsertNaoConformidade());
				preparedStatement.setInt(1, naoConformidadeDTO.getCodNaoConformidade());
				preparedStatement.setString(2, naoConformidadeDTO.getDesNaoConformidade());
				preparedStatement.setInt(3, naoConformidadeDTO.getCodGrupoDefeito());
				preparedStatement.execute();
				return true;

			} catch (SQLException ex) {
				Logger lgr = Logger.getLogger(NaoConformidadeDAO.class.getName());
				lgr.log(Level.SEVERE, ex.getMessage(), ex);
				return false;
			}
		}

		// lista todos os grupos de defeito cadastrados no banco de dados
		public List<NaoConformidadeDTO>listNaoConformidade() throws SQLException{
			
			ConexaoBD conexaoBD = new ConexaoBD();
			ArrayList<NaoConformidadeDTO> lista = new ArrayList<NaoConformidadeDTO>();
			Statement st = null;
			ResultSet rs = null;

			try {
				st = conexaoBD.connection.createStatement();

				String sql = constantesSQL.getSqlSelectNaoConformidade();
				rs = st.executeQuery(sql);

				while (rs.next()) {

					NaoConformidadeDTO naoConformidadeDTO = new NaoConformidadeDTO();
					naoConformidadeDTO.setCodNaoConformidade(rs.getInt(1));
					naoConformidadeDTO.setDesNaoConformidade(rs.getString(2));
					naoConformidadeDTO.setDesGrupoDefeito(rs.getString(3));
					naoConformidadeDTO.setCodGrupoDefeito(rs.getInt(4));
					lista.add(naoConformidadeDTO);
				}

			} catch (SQLException ex) {
				Logger lgr = Logger.getLogger(NaoConformidadeDAO.class.getName());
				lgr.log(Level.SEVERE, ex.getMessage(), ex);
			} finally {
				try {
					if (rs != null) {
						rs.close();
					}
					if (st != null) {
						st.close();
					}
					if (conexaoBD.connection != null) {
						conexaoBD.connection.close();
					}
				} catch (SQLException ex) {
					Logger lgr = Logger.getLogger(NaoConformidadeDAO.class.getName());
					lgr.log(Level.WARNING, ex.getMessage(), ex);
				}

			}

			return lista;
		}
		
		// Remove o cadastrado no banco de dados
		public boolean deletarNaoConformidade(NaoConformidadeDTO naoConformidadeDTO) throws SQLException {

			ConexaoBD conexaoBD = new ConexaoBD();

			Statement st = null;
			ResultSet rs = null;

			try {

				st = conexaoBD.connection.createStatement();
				PreparedStatement preparedStatement = conexaoBD.connection
						.prepareStatement(ConstantesSQL.getSqlDeleteNaoConformidade());
				preparedStatement.setInt(1, naoConformidadeDTO.getCodNaoConformidade());
				preparedStatement.executeUpdate();
				return true;

			} catch (SQLException ex) {
				Logger lgr = Logger.getLogger(NaoConformidadeDAO.class.getName());
				lgr.log(Level.SEVERE, ex.getMessage(), ex);
				return false;
			}
		}

		// Editar Grupos de Defeito cadastrados no banco de dados
		public boolean editarNaoConformidade(NaoConformidadeDTO naoConformidadeDTO) throws SQLException {

			ConexaoBD conexaoBD = new ConexaoBD();
			Statement st = null;
			ResultSet rs = null;

			try {

				st = conexaoBD.connection.createStatement();

				PreparedStatement preparedStatement = conexaoBD.connection
						.prepareStatement(ConstantesSQL.getSqlUpdateNaoConformidade());
				preparedStatement.setString(1, naoConformidadeDTO.getDesNaoConformidade());
				preparedStatement.setInt(2, naoConformidadeDTO.getCodGrupoDefeito());
				preparedStatement.setInt(3, naoConformidadeDTO.getCodNaoConformidade());
				preparedStatement.executeUpdate();
				return true;

			} catch (SQLException ex) {
				Logger lgr = Logger.getLogger(NaoConformidadeDAO.class.getName());
				lgr.log(Level.SEVERE, ex.getMessage(), ex);
				return false;

			}
		}
}
